package com.framework.service;

import com.baomidou.mybatisplus.service.IService;
import com.framework.entity.sys.SysAgent;
import com.framework.entity.sys.SysBank;
import com.framework.entity.ter.TerMerchantReport;
import com.framework.page.PageUtils;
import com.framework.view.AgentVerifiedForm;
import com.framework.view.NewAgentVerifiedForm;
import com.framework.view.RegistStarposBean;

import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 功能描述: 代理商接口
 *
 * @author ck
 * @date 2018/8/28 19:46
 */
public interface AgentService extends IService<SysAgent> {
    /**
     * 功能描述: 带参数的分页查询
     * @param params 参数合集
	 * @return 返回分页结果对象
     */
    PageUtils queryPage(Map<String, Object> params);


	/**
	 * 功能描述: 根据手机号码查询代理商
	 * @param phone 手机号码
	 * @param deptId 渠道id
	 * @return 合伙人对象
	 */
	SysAgent queryByMobileAndDeptId(String phone,Long deptId);
	/**
	 *	根据id查询所属逇代理商信息
	 * @param agentId 代理商所属的id
	 * @return agent
\	 */
	SysAgent queryAgentById(Long agentId);

	/**
	 * 功能描述: 登录操作
	 * @param phone
	 * @param password
	 * @param deptId
	 * @return
	 */
	Map<String,Object> login(String phone, String password, Long deptId);

	/**
	 * 功能描述: 根据token获取代理商详细信息
	 * @param token
	 * @return map
	 */
	Map<String,Object> getAgentByToken(String token);

	/**
	 *  功能描述: 退出登录
	 * @param token
	 */
	void outLogin(String token);

	/**
	 *  注册
	 * @param phone 手机号码
	 * @param password 密码
	 * @param confPassword 确认密码
	 * @param smsCode 注册短信code
	 * @param pid 推荐人id
	 * @param name 注册姓名
	 * @param deptId
	 */
	void register(String phone, String password, String confPassword, String smsCode, Long pid, String name, Long deptId);

	/**
	 *	增加基础代理商信息
	 * @param agent
	 */
	void insertAgent(SysAgent agent);

	/**
	 * 忘记密码
	 * @param phone 手机号码
	 * @param password 密码
	 * @param confPassword 重复密码
	 * @param smsCode 短信验证码
	 * @param deptId
	 */
	void forgetPassword(String phone, String password, String confPassword, String smsCode, Long deptId);

	/**
	 *	根据token查询代理商缓存信息
	 * @param token 登录token
	 * @return
	 */
	SysAgent queryAgentByToken(String token);

	/**
	 * 查询团队代理商新增
	 * @param agentId 代理商id
	 * @param type 1：昨天数据 2：本月数据
	 * @param isOwn 是否自己 1否，2是
	 * @return
	 */
	int queryAgentAddCount(Long agentId, Integer type,Integer isOwn);

	/**
	 * 实名认证
	 * @param form 表单
	 * @param token 登录人token
	 */
	void agentVerified(AgentVerifiedForm form, String token);

	/**
	 * 修改
	 * @param agent
	 */
	void updateAgentById(SysAgent agent);

	/**
	 * 提现默认页面
	 * @param token
	 * @return
	 */
	Map<String,Object> withdrawInfo(String token);

	/**
	 * 合伙人列表和合伙人统计信息
	 * @param token
	 * @param partnerCount
	 * @param thisMonthAmount
	 * @param merchantCount
	 * @param realName
	 * @param name
	 * @return
	 */
	Map<String,Object> queryPartnerMap(String token, String partnerCount, String thisMonthAmount, String merchantCount, String realName, String name);

	/**
	 * 查询自己的下级代理商信息
	 * @param token
	 * @return
	 */
	List<SysAgent> queryAgentByPid(String token);

	/**
	 * 查询上级为agentId的列表
	 * @param agentId
	 * @return
	 */
	List<SysAgent> queryAgentByPid(Long agentId);

	/**
	 * 根据手机号码越级分配
	 * @param token
	 * @param phone
	 * @return
	 */
	List<SysAgent> queryOverByPhone(String token,String phone);

	/**
	 * 获取代理商的等级
	 * @param token
	 * @return
	 */
	Integer queryLv(String token);

	/**
	 * 代理商详细数据
	 * @param token
	 * @param types
	 * @param time
	 * @param agentId
	 * @return
	 */
	Map<String,Object> queryAgentInfo(String token,String types,String time,Long agentId);

	/**
	 * 根据渠道获取所有正常的代理商
	 * @param deptId
	 * @return
	 */
	List<SysAgent> queryNormalAgentList(Long deptId);

	/**
	 * 修改图片
	 * @param token
	 * @param img
	 */
	void updateHeadImg(String token,String img);


	/**
	 * 查询代理人详细信息
	 * @param params 手机号码，代理人姓名
	 * @return
	 */
	PageUtils queryAgentList(Map<String,Object> params);


	/**
	 * 冻结合伙人
	 * @param agent
	 */
	void freezAgent(SysAgent agent);

	/**
	 * 查询详情
	 * @param agentId
	 * @return
	 */
	Map<String,Object> findAgentDetail(Long agentId);

	/**
	 * 更新合伙人相关信息：密码，上级推荐人，等级，姓名
	 * @param agent
	 */
	void updateAgent(Map<String,Object> agent);

	/**
	 * 检查上级推荐人是否存在,根据手机和姓名返回agentId
	 * @param phone
	 * @param parentName
	 * @param deptId
     * @return
	 */
	Long checkParent(String phone, String parentName, Long deptId);

	/**
	 * 查询所有被封禁的合伙人
	 * @param params
	 * @return
	 */
	PageUtils queryForbidAgentList(Map<String,Object> params);


	/**
	 * 根据姓名查询合伙人
	 * @param name
	 * @param deptId
     * @return
	 */
	List<SysAgent> queryByName(String name, Long deptId);


	/**
	 * 根据渠道id获取当前渠道最基础合伙人 agentId为最小
	 * @param deptId 渠道id
	 * @return
	 */
    SysAgent queryBasicAgentBydeptId(Long deptId);

	/**
	 * 查询本月有效的直属合伙人
	 * @param agentId
	 * @param type
	 * @return
	 */
    List<SysAgent> queryRealSubAgent(Long agentId,Integer type);


	/**
	 * 根据下级合伙人和平台id查出顶级盟主
	 * @param subId 下级合伙人
	 * @param baseAgentId 平台推荐吗
	 * @return
	 */
	SysAgent queryTopAgentBySubIdAndBase(Long subId,Long baseAgentId);

	/**
	 * 推送删除用户的通知
	 * @param report
	 */
    void pushDelMerNotice(TerMerchantReport report);

	/**
	 *更新采购300台人员的等级
	 * @param agentId
	 */
    void updateAgentGrade(Long agentId);

	/**
	 * 星pos商户进件
	 * @param bean
	 * @param token
	 * @return
	 */
	Map<String, Object> registStarpos(RegistStarposBean bean, String token);

	/**
	 * 上传星pos进件所需材料
	 * @param mercId
	 * @param url1
	 * @param url2
	 * @param url3
	 * @return
	 */
	Map<String, Object> uploadStarPosImg(String mercId, String url1, String url2, String url3) ;

	/**
	 * 获取等级详情
	 * @param agentId
	 * @param deptId
	 * @return
	 */
	List<Map<String, Object>> getRateList(Long agentId, Long deptId);

	/**
	 * 修改身份证
	 * @param token
	 * @param identity
	 * @param smsCode
	 */
	void updateIdentity(String token, String identity, String smsCode);

	/**
	 * 修改银行卡
	 * @param token
	 * @param bankName
	 * @param smsCode
	 * @param bankCode
	 */
	void updateBank(String token, String bankName, String smsCode, String bankCode,String phone);

	/**
	 * 修改手机号码
	 * @param token
	 * @param newPhone
	 * @param smsCode
	 */
	void updatePhone(String token, String newPhone, String smsCode);

	/**
	 * 修改姓名
	 * @param token
	 * @param newName
	 * @param smsCode
	 */
	void updateName(String token, String newName, String smsCode);

	/**
	 * 根据token获取人物信息
	 * @param token
	 * @return
	 */
	Map<String, Object> getInfoByToken(String token);

	/**
	 * 修改密码
	 * @param token
	 * @param password
	 * @param confPassword
	 * @param smsCode
	 * @param oldPassword
	 */
	void updatePassword(String token, String password, String confPassword, String smsCode, String oldPassword);

	/**
	 * 获取钱包页面信息
	 * @param token
	 * @return
	 */
    Map<String, Object> getWalletInfo(String token);

	/**
	 * 修改交易密码
	 * @param token
	 * @param password
	 * @param confPassword
	 * @param smsCode
	 * @param oldPassword
	 */
	void updateTradePassword(String token, String password, String confPassword, String smsCode, String oldPassword);

	/**
	 * 生成 二维码
	 * @param token
	 */
	void generateQR(String token);

	/**
	 * 取消实名认证
	 * @param agentId
	 */
	void cancelRealName(Long agentId);

	/**
	 * 实名
	 * @param params
	 * @param deptId
	 */
	void realNameByAdmin(Map<String, Object> params, Long deptId);


	/**
	 * 下载合伙人列表
	 * @param deptId
	 * @param response
	 */
    void downLoad(Long deptId, HttpServletResponse response);

	/**
	 * 提现页面信息
	 * @param token
	 * @return
	 */
	Map<String, Object> takeIndexInfo(String token);

	/**
	 * 实名验证合伙人
	 * @param form
	 * @param token
	 */
	void verifiedAgent(NewAgentVerifiedForm form, String token);

	/**
	 * 根据token分享
	 * @param token
	 * @param shareId
	 * @return
	 */
	List<String> shareByToken(String token, Integer shareId);

	/**
	 * 获取客服
	 * @param token
	 * @return
	 */
    Map<String, Object> getCusService(String token);

	/**
	 * 设置消息推送
	 * @param token
	 * @param state
	 */
	void setPushState(String token, Integer state);

	/**
	 * 添加用户宝激活返现
	 * @param sn
	 * @param reapAmount
	 */
    void addYhbActivAmount(String sn, BigDecimal reapAmount);

	/**
	 * 清理图片
	 * @param token
	 * @param imgUrl
	 */
	void cleanImg(String token, String[] imgUrl);

	/**
	 * 查询团队成员具体数据
	 * @param token
	 * @param partnerCount
	 * @param thisMonthAmount
	 * @param merchantCount
	 * @param realName
	 * @param name
	 * @param thisMonthActiv
     * @return
	 */
	Map<String, Object> queryPartnerInfo(String token, String partnerCount, String thisMonthAmount, String merchantCount, String realName, String name, String thisMonthActiv);

    SysAgent queryAgentByNameAndPhone(String name, String phone);

	/**
	 * 签约代付
	 * @param token
	 * @param phone
	 * @param identityHead
	 * @param identityEm
	 * @param vCode
	 */
    void signContractByToken(String token, String phone, String identityHead, String identityEm, String vCode);

	/**
	 * 签约代付接口
	 */
	void signContract(String phone, String identityHead, String identityEm, SysAgent agent, SysBank bank);
}

